package metier;

import exception.BiblioException;

import java.util.ArrayList;
import java.util.Date;

import enumeration.EnumStatusExemplaire;
//import exception.BiblioException;
import exception.BiblioException;

public class Utilisateur extends Personne
{

		private Integer idUtilisateur;
		private String pwd;
		private String pseudonyme;
		
		
		private ArrayList<EmpruntEncours> emprunts = new ArrayList<EmpruntEncours>();
		
		
		
		//public Utilisateur(String nom, String prenom, Integer idUtilisateur, String pwd)
		public Utilisateur(String nom, String prenom, Integer idUtilisateur, String pwd)
		{	super(nom,prenom);
			setNom(nom);
			setPrenom(prenom);
			setIdUtilisateur(idUtilisateur);
			setPwd(pwd);
		}
		
		public Utilisateur(Utilisateur utilisateur)
		{
			this(utilisateur.getNom(),utilisateur.getPrenom(),utilisateur.getIdUtilisateur(),utilisateur.getPwd());
		}
		

		public Integer getIdUtilisateur()
		{return idUtilisateur;}
		public void setIdUtilisateur(Integer idUtilisateur) 
		{this.idUtilisateur = idUtilisateur;}
		public String getPwd() {return pwd;}
		public void setPwd(String pwd)
		{this.pwd = pwd;}
		public String getPseudonyme()
		{return pseudonyme;}
		public void setPseudonyme(String pseudonyme)
		{this.pseudonyme = pseudonyme;}
		public ArrayList<EmpruntEncours> getEmpruntEncours()
		{return emprunts;}
		
		
		
		public int getNbEmpruntsEncours()
		{
			return emprunts.size();
		}

		@Override
		public String toString() 
		{
			return super.toString() + "Utilisateur [idUtilisateur=" + idUtilisateur + ", pwd=" + pwd + ", pseudonyme=" + pseudonyme + ", emprunts=" + emprunts + "]";
		}
		
		/**
		 * 
		 * 
		 */
		public void ajouterEmprunt(Exemplaire exemplaire) throws BiblioException
		{
			if(exemplaire.getStatus() == EnumStatusExemplaire.DISPONIBLE)
			{
				EmpruntEncours emp = new EmpruntEncours(exemplaire, this);
				exemplaire.setStatus(EnumStatusExemplaire.PRETE);
			}
			else
			{
				throw new BiblioException("Le livre " + exemplaire + " n'est pas disponible");
			}
		}
		
		
		public boolean rendreEmprunt(int idExemplaire)
		{
			for(EmpruntEncours emp : emprunts)
			{
				if(emp.getExemplaire().getIdExemplaire() == idExemplaire)
				{
					emp.getExemplaire().setStatus(EnumStatusExemplaire.DISPONIBLE);
					
					new EmpruntArchive(new Date(), emp.getDateEmprunt(), this, emp.getExemplaire()); // on archive
					
					emprunts.remove(emp);
					
					return true;
				}
				
			}
			
			return false;
		}

		@Override
		public int hashCode() 
		{
			final int prime = 31;
			int result = super.hashCode();
			result = prime * result
					+ ((idUtilisateur == null) ? 0 : idUtilisateur.hashCode());
			return result;
		}

		@Override
		public boolean equals(Object obj) 
		{
			if (this == obj)
				return true;
			if (!super.equals(obj))
				return false;
			if (getClass() != obj.getClass())
				return false;
			Utilisateur other = (Utilisateur) obj;
			if (idUtilisateur == null) {
				if (other.idUtilisateur != null)
					return false;
			} else if (!idUtilisateur.equals(other.idUtilisateur))
				return false;
			return true;
		}
}
